package com.it.data_sort;

/**
 * @Author: CaoYouGen
 * @DateTime: 2023/05/18/13:45
 * @注释: 冒泡排序
 **/
public class BubbleSort {
    /**
     * @Author: CaoYouGen
     * @注释: 冒泡排序（非递归）
     * @DateTime: 2023/5/19 13:40
     *
     * @param arr:
     * @return void
     */
    public static void bubbleSort(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]){
                    int item = arr[i];
                    arr[i] = arr[j];
                    arr[j] = item;
                }
            }
        }
    }

    /**
     * @Author: CaoYouGen
     * @注释:  冒泡排序（递归）
     * @DateTime: 2023/5/19 13:40
     *
     * @param arr:
     * @return void
     */
    public static void recursionSort(int[] arr){
        toRecursionSort(arr, 0, 0);
    }

    /**
     * @Author: CaoYouGen
     * @注释:  冒泡排序（递归）执行逻辑
     * @DateTime: 2023/5/19 13:40
     *
     * @param arr:
     * @param outer:
     * @param inner:
     * @return void
     */
    private static void toRecursionSort(int[] arr, int outer, int inner){
        inner++;
        // 进入下一个外层循环
        if (inner >= arr.length){
            outer++;
            inner = outer + 1;
        }
        // 已经排序完成无序排序
        if (outer >= arr.length - 1){
            return;
        }
        if (arr[outer] > arr[inner]){
            int item = arr[outer];
            arr[outer] = arr[inner];
            arr[inner] = item;
        }
        toRecursionSort(arr,outer,inner);
    }
}
